package com.example.demo15.mapper;

import com.example.demo15.entity.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 用户映射器接口，定义与用户相关的数据库操作
 * 使用MyBatis注解实现SQL映射
 */
@org.apache.ibatis.annotations.Mapper
public interface UserMapper {

    /**
     * 根据用户ID查询用户信息
     * SQL：SELECT * FROM user WHERE id = #{id}
     *
     * @param id 要查询的用户ID
     * @return 返回匹配ID的用户对象，如果没有找到返回null
     */
    @Select("SELECT * FROM user WHERE id = #{id}")
    User findById(Integer id);

    /**
     * 查询所有用户信息
     * SQL：SELECT * FROM user
     *
     * @return 返回包含所有用户的列表
     */
    @Select("SELECT * FROM user")
    List<User> findAll();

    /**
     * 根据用户名查询用户信息
     * SQL：SELECT * FROM user WHERE username = #{username}
     *
     * @param username 要查询的用户名
     * @return 返回匹配用户名的用户对象，如果没有找到返回null
     */
    @Select("SELECT * FROM user WHERE username = #{username}")
    User findByUsername(String username);

    /**
     * 插入新用户到数据库
     * SQL：INSERT INTO user(username, password) VALUES(#{username}, #{password})
     * 使用自动生成的主键，并将生成的ID设置到user对象的id属性中
     *
     * @param user 要插入的用户对象
     */
    @Insert("INSERT INTO user(username, password) VALUES(#{username}, #{password})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(User user);

    /**
     * 更新现有用户信息
     * SQL：UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}
     *
     * @param user 包含更新信息的用户对象
     */
    @Update("UPDATE user SET username=#{username}, password=#{password} WHERE id=#{id}")
    void update(User user);

    /**
     * 根据用户ID删除用户
     * SQL：DELETE FROM user WHERE id = #{id}
     *
     * @param id 要删除的用户ID
     */
    @Delete("DELETE FROM user WHERE id = #{id}")
    void deleteById(Integer id);
}
